﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace itau.im.gerador.utilitario
{
    public sealed class ConfiguracoesCopiaNK
    {
        private ConfiguracoesGerador _configuracoes;

        public ConfiguracoesCopiaNK()
        {
            this._configuracoes = new ConfiguracoesGerador();

            this.ColecaoCurvaCopia = new ColecaoCurvaCopia(this._configuracoes);
            this.Email = new Email(this._configuracoes);
            this.Parametros = new Parametros(this._configuracoes);
        }

        public ColecaoCurvaCopia ColecaoCurvaCopia
        {
            get;
            private set;
        }

        public Email Email
        {
            get;
            private set;
        }

        public Parametros Parametros
        {
            get;
            private set;
        }
    }

    public sealed class ColecaoCurvaCopia
    {
        public const string CHAVE_CURVAS_IM = "CurvasIM";
        public const string CHAVE_CURVAS_IM_NOME_YIELD_NK = "NomeYieldNK";
        public const string CHAVE_CURVAS_IM_TIPO_YIELD_NK = "TipoYieldNK";

        private ConfiguracoesGerador _configuracoes;

        public ColecaoCurvaCopia(ConfiguracoesGerador configuracoes)
        {
            this._configuracoes = configuracoes;
        }

        public CurvaCopia this[int codigoCurvaIM]
        {
            get
            {
                //Obtém chave da curva
                string chaveCurva = this._configuracoes.ObterValorItemParametroConfiguracao(CHAVE_CURVAS_IM, codigoCurvaIM.ToString());

                if (!string.IsNullOrEmpty(chaveCurva))
                {
                    //Obtém detalhes da curva NK/IM
                    string nomeYield = this._configuracoes.ObterValorItemParametroConfiguracao(chaveCurva, CHAVE_CURVAS_IM_NOME_YIELD_NK);
                    string tipoYield = this._configuracoes.ObterValorItemParametroConfiguracao(chaveCurva, CHAVE_CURVAS_IM_TIPO_YIELD_NK);

                    return new CurvaCopia()
                        {
                            CodigoCurvaIM = codigoCurvaIM,
                            NomeYieldNK = nomeYield,
                            TipoYieldNK = tipoYield
                        };
                }
                else
                {
                    return null;
                }
            }
        }

        public sealed class CurvaCopia
        {
            public int CodigoCurvaIM
            {
                get;
                internal set;
            }

            public string NomeYieldNK
            {
                get;
                internal set;
            }

            public string TipoYieldNK
            {
                get;
                internal set;
            }
        }
    }

    public sealed class Email
    {
        public const string CHAVE_EMAIL = "ConfiguracoesEmail";
        public const string CHAVE_EMAIL_ASSUNTO = "Assunto";
        public const string CHAVE_EMAIL_MENSAGEM = "Mensagem";
        public const string CHAVE_EMAIL_MENSAGEM_ADVERTENCIA = "MensagemAdvertencia";
        public const string CHAVE_EMAIL_SERVIDOR = "ServidorSMTP";
        public const string CHAVE_EMAIL_REMETENTE = "Remetente";
        public const string CHAVE_EMAIL_DESTINATARIO = "Destinatario";

        private ConfiguracoesGerador _configuracoes;

        public Email(ConfiguracoesGerador configuracoes)
        {
            this._configuracoes = configuracoes;
        }

        public string Assunto
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_EMAIL, CHAVE_EMAIL_ASSUNTO);

                return valor;
            }
        }

        public string Mensagem
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_EMAIL, CHAVE_EMAIL_MENSAGEM);

                return valor;
            }
        }

        public string MensagemAdvertencia
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_EMAIL, CHAVE_EMAIL_MENSAGEM_ADVERTENCIA);

                return valor;
            }
        }

        public string ServidorSMTP
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_EMAIL, CHAVE_EMAIL_SERVIDOR);

                return valor;
            }
        }

        public string Remetente
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_EMAIL, CHAVE_EMAIL_REMETENTE);

                return valor;
            }
        }

        public string Destinatario
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_EMAIL, CHAVE_EMAIL_DESTINATARIO);

                return valor;
            }
        }
    }

    public sealed class Parametros
    {
        public const string CHAVE_COPIA_NK = "CopiaNK";
        public const string CHAVE_COPIA_NK_TOLERANCIA_ATRASO_PUBLICACAO = "TempoToleranciaAtrasoPublicacao";
        public const string CHAVE_COPIA_NK_ENVIAR_EMAIL_ATRASO = "EnviarEmailAtrasoPublicacao";

        private ConfiguracoesGerador _configuracoes;

        public Parametros(ConfiguracoesGerador configuracoes)
        {
            this._configuracoes = configuracoes;
        }

        public int ToleranciaAtrasoPublicacao
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_COPIA_NK, CHAVE_COPIA_NK_TOLERANCIA_ATRASO_PUBLICACAO);

                if (!string.IsNullOrEmpty(valor))
                {
                    return Convert.ToInt32(valor);
                }
                else
                {
                    return 0;
                }
            }
        }

        public bool EnviarEmailAtrasoPublicacao
        {
            get
            {
                string valor = _configuracoes.ObterValorItemParametroConfiguracao(CHAVE_COPIA_NK, CHAVE_COPIA_NK_ENVIAR_EMAIL_ATRASO);

                if (string.IsNullOrEmpty(valor))
                {
                    return Convert.ToBoolean(Convert.ToInt32(valor));
                }
                else
                {
                    return false;
                }
            }
        }
    }
}
